package com.coder.algorithm.offer_2;

import java.util.Locale;

/**
 * 斐波那契数列
 * <p>
 * 斐波那契数列的定义如下：
 * n = 0 f(n) = 0
 * n = 1 f(n) = 1
 * n > 1 f(n) = f(n-1) + f(n-2)
 *
 * @author yuhushuan
 * @date 2020/6/5 20:28
 */
public class _10_1_Fibonacci {
    public static void main(String[] args) {
        // 功能测试（如输入 3、5、10）

        print(3);
        print(5);
        print(10);

        // 边界值测试（如输入 0、1、2）
        print(0);
        print(1);
        print(2);

        // 性能测试（输入较大的数字，如 40、50、100）等
        print(40);
        print(50);
        print(100);
    }

    private static void print(int n) {
        System.out.println(String.format(Locale.getDefault(),
                "第 %d 项值为：%d",
                n, fibonacci(n)));
    }

    private static long fibonacci(int n) {
        long number1 = 0;
        long number2 = 1;
        long fn = 0;

        if (n == 0) {
            return number1;
        }
        if (n == 1) {
            return number2;
        }

        for (int i = 2; i <= n; i++) {
            fn = number1 + number2;
            number1 = number2;
            number2 = fn;
        }
        return fn;
    }
}
